//从两个数字数组里生成最小数字
/*给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 ，每个数组中的元素 互不相同 ，请你返回 最小 的数字，两个数组都 至少 包含这个数字的某个数位。*/
class Solution {
public:
    int minNumber(vector<int>& nums1, vector<int>& nums2) {
        int Min = INT_MAX;
        int min1 = INT_MAX;
        int min2 = INT_MAX;
        int hash1[10] = {0};
        int hash2[10] = {0};
        for (auto& num : nums1) {
            hash1[num]++;
            min1 = min(min1, num);
        }
        for (auto& num : nums2) {
            hash2[num]++;
            if (hash1[num] && hash2[num])
                Min = min(Min, num);
            min2 = min(min2, num);
        }
        if (min1 > min2) {
            swap(min1, min2);
        }
        Min = min(Min, min1 * 10 + min2);
        return Min;
    }
};


//重新格式化字符串
/*给你一个混合了数字和字母的字符串 s，其中的字母均为小写英文字母。

请你将该字符串重新格式化，使得任意两个相邻字符的类型都不同。也就是说，字母后面应该跟着数字，而数字后面应该跟着字母。

请你返回 重新格式化后 的字符串；如果无法按要求重新格式化，则返回一个 空字符串 。
*/
class Solution {
public:
    void _reformat(string& s1, string& s2, string& ret) {
        int left = 0;
        int right = 0;
        if (s1.size() > s2.size()) {
            ret += s1[left];
            left++;
        }
        int floag = 0;
        while (left < s1.size() || right < s2.size()) {
            if (floag) {
                ret += s1[left];
                left++;
                floag = 0;
            } else {
                ret += s2[right];
                right++;
                floag = 1;
            }
        }
    }
    string reformat(string s) {
        string ret;
        int nums = 0;
        int str = 0;
        string s1;
        string s2;
        for (auto& c : s) {
            if (c >= '0' && c <= '9') {
                nums++;
                s1 += c;
            } else {
                str++;
                s2 += c;
            }
        }
        if (abs(nums - str) > 1)
            return ret;
        _reformat(s1, s2, ret);
        return ret;
    }
};